package com.miracle.设计模式.结构型模式.代理模式.JDK动态代理;

import com.miracle.设计模式.结构型模式.代理模式.IHttpInvoke;
import com.miracle.设计模式.结构型模式.代理模式.Server;


public class JDK动态代理 {

    /**
     * JDK动态代理底层实现原理：使用接口实现方式，运行时，在内存中动态构建出一个类，然后编译，执行。这个类是一次性的，JVM停止，代理类就消失。
     * 默认情况下JVM是不保存动态创建代理类字节码对象的，可以在main方法中配置代理参数让字节码保留
     */
    public static void main(String[] args) {

        //配置代理参数让字节码保留
        //JDK8之前
        // System.setProperty("sun.misc.ProxyGenerator.saveGeneratedFiles", "true");
        //JDK8之后
        // System.setProperty("jdk.proxy.ProxyGenerator.saveGeneratedFiles", "true");

        IHttpInvoke server = new Server();
        IHttpInvoke proxy = (IHttpInvoke) new HttpInvokeProxy2().getProxy(server);//创建动态代理的对象
        String response = proxy.invoke("代码永无bug！");

    }
}
